算法创作实战01 - 巴纳姆效应之随机星座实验
介绍了随机和噪声在算法创作中的应用。
今天我们一起来用 Max/MSP 实现一个半(hu)仙(shuo)算(ba)命(dao)小应用,加深对 Max/MSP 中 random
对象的了解,并且学习如何使用 coll
对象。
名称:麦克斯半仙儿(又名 Random Bullshit)
主要使用的对象:random, coll, route, jit.cellblock, fpic
难度系数:★☆☆☆☆
背景知识
巴纳姆效应(Barnum effect)是 1948 年由心理学家伯特伦·福勒通过试验提出的一种心理学现象,以杂技师巴纳姆的名字命名。巴纳姆效应是一种心理现象,人们会对他们认为是为自己量身订做的一些人格描述,给予高度准确的评价,而这些描述往往十分模糊及普遍,以致能够放诸四海皆准适用于很多人身上。(https://www.wikiwand.com/zh-hans/%E5%B7%B4%E7%B4%8D%E5%A7%86%E6%95%88%E6%87%89)
据说巴纳姆的成功秘诀是:「永远要让每一个观众都感到自己若有所获」。意思如果要让每一个人都能感到对自己个性的描述是准确的,就要去提供一些放之四海而皆准的描述。看手相、算命、占星术及其他伪心理学经常利用这种效应,怎么说都能让你听着有点儿道理。于是有人将十二星座的描述随机排列,发现不同星座的描述基本上可以适用于其他星座。
所以今天我们来实践一下这个想法,看看程序随机给出的星座描述,有没有戳中你。🌝
任务拆解
这个程序叫麦克斯半仙儿,用户选择自己的星座后,程序给出描述。最后的成果是这样:
首先来拆解需要干的事儿:
收集十二星座的简短描述和图标
存储文本,方便随机调用
12 星座的选择控件
显示结果(包括加载默认值)
开始动手前,请复习 Max/MSP 文档中 random, coll, route, jit.cellblock, fpic 等对象的说明。
实现步骤
这个小应用的核心是用 random
对象随机显示 coll
对象中存储的内容。coll
即 collection,用来存储一个列表,列表中每一项都包含 key 和 value(中间用 , 隔开),可以通过 key 获取对应的 value。value 可以是单个值,也可以是以空格分隔的多个值。
在 Max 中新建名字为 blah 的 coll
对象,双击(或者 cmd+点击)打开,填入我们在网上找到的十二星座描述内容,格式如下:
0, 你大方、明朗,全身充滿活力……;
1, 你不但好學、知識豐富,還很……;
2, 嗯,你善於說服別人,還是個……;
……
十二个星座描述的索引是从 0~11,所以在 coll
前用一个 random
对象随机选取其中一个星座的描述,然后从 coll
的左出口输出。因为我们存储的是文本内容(symbol),所以需要用一个 route
对象读取 symbol 内容,并发送到显示区域。
如果不想每次双击打开 coll
查看,可以用 refer 名字
消息连接一个 jit.cellblock
查看 coll
里面的内容。
随机调用的内容准备就绪后,接下来是选择星座的界面:
用 fpic
显示星座图标,在上面覆盖一个 button
对象,将按钮背景设置为透明。然后将按钮连接到 random
对象,读取 coll
的内容。
因为想显示每次选择的星座名称,所以每个按钮连接了一个包含对应星座名称的 message
,点击按钮时可以触发显示在内容区域。其实用 radio group
对象能更好实现,但是它的 UI 不好自定义,就放弃了。
完整的 patch 如下:
后记
程序做好以后,随机生成了几个描述,发到朋友圈,让大家猜这些描述原本对应的是什么星座。
结果是——没有全部猜对的,哈哈哈!应该给撰写星座描述的小编加🍗~
今天先这样,下一期实战见~
Max/MSP/Jitter 教程系列
Max/MSP/Jitter 教程 01 - 什么是矩阵?
Max/MSP/Jitter 教程 02 - Jitter 对象的属性
Max/MSP/Jitter 教程 03 - 播放 QuickTime 视频
Max/MSP/Jitter 教程 04 - 创建矩阵
Max/MSP/Jitter 教程 05 - 矩阵的数学运算
友情提示:独自折腾 Max 易患上癔症……不妨入群互助
👇👇👇